Модуль:Factory
local p = {} local arrData = mw.loadData( 'Module:DataFactory' ) local crops = mw.loadData( 'Module:DataCrops' ) local animal = mw.loadData( 'Module:DataAnimal' ) local tree = mw.loadData( 'Module:DataTree' ) local materials = mw.loadData( 'Module:DataMaterials' ) local buybase local id --Карточка фабрики-- function p.getView( frame ) id = frame.args1 return path().. infobox().. description().. placeBuy().. location().. material().. hr().. Factoryres().. port() end function path() local root = mw.html.create( 'div' ) :css('font-size', '12px') :css('margin-bottom', '10px') :wikitext('Фабрики / '..id) return tostring( root ) end function infobox() local root = mw.html.create( 'div' ) :addClass('infobox-crop') root:tag( 'div' ) :addClass('infobox-crop-h') :wikitext(id) root:tag( 'div' ) :attr('id','img-tree') :wikitext('center') item=root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') item:tag( 'div' ) :addClass('item-label') :wikitext('Категория') item:tag( 'div' ) :addClass('item-data') :wikitext('Фабрики') item=root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') item:tag( 'div' ) :addClass('item-label') :wikitext('Строительство') item:tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.materials and 'Требуется' or 'Не требуется') item=root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') item:tag( 'div' ) :addClass('item-label') :wikitext('Локация') item:tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.location and '[['..arrDataid.location..']]' or 'Любая') root:tag( 'div' ) :tag( 'div' ) :addClass('infobox-crop-h-section') :wikitext('Продукция') item=root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') item:tag( 'div' ) :addClass('item-label') :wikitext('Время производства') item:tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.tm..' мин') item=root:tag( 'div' ) :addClass('item-spacing') :addClass('item-border') item:tag( 'div' ) :addClass('item-label') :wikitext('Количество') item:tag( 'div' ) :addClass('item-data') :wikitext(arrDataid.c) return tostring( root ) end function description() local text=' Описание '.. ' Фабрика производит продукцию, которую можно продать за монеты или загрузить в качестве сырья на другую фабрику. '.. ' Для того чтобы фабрика заработала, ее необходимо: '.. ' ' text=text..(arrDataid.shop and ' Купить или получить в подарок ' or ' Купить ') if (pcall(function () if arrDataid.materials nil then error() end end)) then text=text..' Построить ' end if (pcall(function () if arrDataid.friend nil then error() end end)) then text=text..' Нанять друзей ' end text=text..' ' if (arrDataid.level~=0 or arrDataid.levelagro~=0 or arrDataid.buy~=0 or arrDataid.buyagro~=0) then text=text..' Фабрику можно купить:'.. ' ' if (arrDataid.buy~=0 or arrDataid.level~=0) then text=text..' ' if arrDataid.level~=0 then text=text..'с '..arrDataid.level..' уровня ' end if arrDataid.buy~=0 then text=text..'за '..arrDataid.buy..' 15px' end text=text..' ' end if (arrDataid.buyagro or arrDataid.levelagro) then text=text..' ' if arrDataid.levelagro then text=text..'с '..arrDataid.levelagro..' уровня ' end if arrDataid.buyagro then text=text..'за '..arrDataid.buyagro..' 15px' end text=text..' ' end text=text..' ' end text=text..' Время производства 1 единицы продукции составлет '..arrDataid.tm..' мин. '.. ' Одновременно на фабрику можно загрузить сырье для производства '..arrDataid.c..' единиц продукции. ' if arrDataid.exper~=0 then text=text..' При покупке фабрики начисляется опыт: '..arrDataid.exper..' . ' end if arrDataid.del~=0 then text=text..' При удалении фабрики начисляется компенсация в размере '..arrDataid.del..' 15px. ' end return text end function placeBuy() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Место покупки фабрики') root:tag( 'div' ) :wikitext(arrDataid.shop and ' '..arrDataid.shop..' ' or ' Фабрику можно купить в Магазине. ') return tostring( root ) end function location() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Локация') root:tag( 'div' ) :wikitext(arrDataid.location and 'Фабрику можно построить только в локации [['..arrDataid.location..']].' or 'Фабрику можно построить в любой локации, в которой есть Промзона или зона Поле.') return tostring( root ) end --найм персонала на фабрику-- function hr() if (not pcall(function () if arrDataid.friend nil then error() end end)) then return "" end local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Нанять друзей') root:tag( 'div' ) :wikitext('Фабрика начнет работать только после найма персонала.') root:tag( 'div' ) :wikitext('Пригласите своих друзей на должности:') local ul=root:tag( 'ul' ) for k,v in pairs(arrDataid.friend) do ul:tag( 'li' ) :wikitext(v) end root:tag( 'div' ) :wikitext('Как только ваши друзья примут приглашения, вы сможете начать производить продукцию на вашей фабрике.') return tostring( root ) end --Улучшение в Порту-- function port() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Улучшение в Торговом порту') root:tag( 'div' ) :wikitext(arrDataid.port and 'Фабрику можно улучшить в Торговом порту.' or 'Фабрику нельзя улучшить в Торговом порту.') if arrDataid.port nil then return tostring( root ) end root:tag( 'div' ) :wikitext('Что можно улучшить?') root:tag( 'div' ) :wikitext(arrDataid.port1.tm 0 and 'Для данной фабрики можно увеличить количество загружаемого сырья с 3 до 6.' or 'Для данной фабрики можно уменьшить время производства 1 ед. продукции.') root:tag( 'div' ) :wikitext('Всего можно улучшить 8 фабрик на одной локации.') local c=arrDataid.c local co=1 local tb=root:tag('table') :addClass('article-table') local thead=tb:tag('tr') thead :tag('th') :attr('width','10%') :wikitext('Уровень') thead :tag('th') :attr('width','15%') :wikitext('Цена 15px ') thead :tag('th') :attr('width','15%') :wikitext('Цена 15px ') thead :tag('th') :wikitext(arrDataid.port1.tm 0 and 'Количество сырья, загружаемого за 1 раз' or 'Время производства продукции в минутах') for i,v in ipairs(arrDataid.port) do trbody =tb:tag('tr') trbody:tag('td') :css('text-align','center') :wikitext(v.level) trbody:tag('td') :css('text-align','center') :wikitext(v.buy) trbody:tag('td') :css('text-align','center') :wikitext(v.buy1) trbody:tag('td') :css('text-align','center') :wikitext(v.tm 0 and 3+i or v.tm) co=i end return tostring( root )..require("Module:Gallery").Gallery(id,co) end --Стройматериалы-- function material() local root = mw.html.create( 'div' ) root:tag( 'h2' ) :wikitext('Строительство') root:tag( 'div' ) :wikitext(arrDataid.materials and 'После покупки фабрику необходимо еще построить, для этого нужно будет купить материалы.' or 'Фабрика строится мгновенно, сразу же при покупке. Материалы для постройки фабрики не нужны.') if arrDataid.materials nil then return "" end local tb=root:tag('table') :addClass('article-table') :addClass('fab') local thead=tb:tag('tr') thead :tag('th') :wikitext() thead :tag('th') :wikitext('Материалы') thead :tag('th') :wikitext('Количество') thead :tag('th') :wikitext('Цена 15px') thead :tag('th') :wikitext('Стоимость 15px') local total=0 for i,v in ipairs(arrDataid.materials) do trbody =tb:tag('tr') trbody:tag('td') :wikitext(v.name and '50px' or '') trbody:tag('td') :css(v.name and "'text-align','center'" or "'color','red'") :wikitext(v.name or 'Категория: Проверить') trbody:tag('td') :css('text-align','center') :wikitext(v.c or '') trbody:tag('td') :css('text-align','center') :wikitext(materialsv.name.buy or '') trbody:tag('td') :css('text-align','center') :wikitext(materialsv.name.buy*v.c or '') total=materialsv.name.buy*v.c+total end trbody =tb:tag('tr') trbody:tag('td') :attr('colspan','4') :wikitext('Итого:') trbody:tag('td') :css('font-weight','bold') :css('text-align','center') :wikitext(total) return tostring( root ) end --Производимая продукция и ресурсы-- function Factoryres() --Составляем массив для столбца с ресурсами-- data = {} --Преобразуем деревья-- for key,v in pairs(tree) do if (pcall(function () if v.nameprod nil then error() end end)) then datav.nameprod={buy=v.sell,fab=key,name=v.nameprod} else datakey={buy=v.sell,fab=key,name=v.name} end end --Преобразуем животных-- for key,v in pairs(animal) do datav.nameprod={buy=v.sell,fab=v.nameprod,name=v.nameprod} end --Преобразуем продукцию фабрик-- for key,v in pairs(arrData) do for i,v1 in ipairs(v.resources) do datav1.nameprod={buy=v1.sell,name=v1.nameprod,fab=key} end end --Добавляем семена-- for key,v in pairs(crops) do datakey={name=v.name,fab=key} local ok, msg = pcall(function () if cropspkey.agronom nil then error() end end) datakey.buy= ok and v.buy or v.sell end local text= local total=0 text=text..' Производство '.. ' Для того чтобы произвести продукцию, на фабрику загружается сырье, а затем собирается готовая продукция. '.. ' В следующей таблице находится список сырья и производимых товаров. ' --Добавляется основной ресурс-- text=text..baseres().. ' '.. ' Всего: total '.. ' '.. ' '.. ' Сырье '.. ' Цена 15px '.. ' '.. ' Продукция '.. ' Цена 15px '.. ' Доход 15px '.. ' ' --Добавляются столбцы с ресурсами- for i,v in ipairs(arrDataid.resources) do local nameres1=v.nameres1 text=text..' ' --Проверка на наличие ресурса в БД-- if (pcall(function () if datanameres1.name nil then error() end end)) then text=text..' [[Файл:'..datanameres1.name..'.png|50px]] '.. ' [['..datanameres1.fab..'|'..datanameres1.name..']] '.. ' '..(datanameres1.buy and datanameres1.buy or'!')..' ' else text=text..' 50px '.. ' '..nameres1..' '.. ' - '.. 'Категория: Проверить' end --Добавлется строка для фабрики с 3 ресурсами-- if (pcall(function () if datanameres2.name nil then error() end end)) then text=text..' '.. ' [[Файл:'..datanameres1.name..'.png|50px]] '.. ' [['..datanameres1.fab..'|'..datanameres1.name..']] '.. ' '..datanameres1.buy..' '.. ' ' end --Добавляются столбцы с продукцией- text=text.. ' 50px '.. ' '..v.nameprod..' '.. ' '..v.sell..' '.. ' ' if (pcall(function () if datanameres1.name nil then error() end end)) then text=text..(math.floor((v.sell-(datanameres1.buy and datanameres1.buy or 0)-buybase)*100)/100) else text=text..'-' end text=text..' ' i=i+1 total=i-1 end text=string.gsub (text, "total", total)..' ' return text end --Добавляется основной ресурс-- function baseres() local text='' buybase=0 --Наличие базового ресурса-- if (not pcall(function () if arrDataid.resourcebase nil then error() end end)) then return text end text=text..' Для производства продукции на эту фабрику необходимо загружать два вида сырья: основное и сменяемое сырье. Основное сырье - сырье, которое требуется для производства каждой единицы продукции. Сменяемое сырье – сырье, которое меняется для производства каждого вида товара. '.. ' '.. ' '.. ' '.. ' Основное сырье '.. ' Цена 15px '.. ' ' for i,v in ipairs(arrDataid.resourcebase) do text=text..' '.. ' 50px ' if (pcall(function () if datav.name.name nil then error() end end)) then text=text.. ' [['..datav.name.fab..'|'..v.name..']] '.. ' '..datav.name.buy..' ' buybase=buybase+datav.name.buy else text=text.. ' '..v.name..' '.. ' - '.. 'Категория: Проверить' end text=text..' ' end return text..' Итого: '..buybase..' ' end --Список фабрик на которых можно переработать продукт frame-- function p.fab(frame) local id=type(frame) 'string' and frame or frame.args1 local arrData = mw.loadData( 'Module:DataFactory' ) local data={} local j=1 for i,v in pairs(arrData) do for i2,v2 in pairs(v.resources) do if v2.nameres1 id then dataj=i j=j+1 break end end if v.resourcebase~=nil then for i1,v1 in pairs(v.resourcebase) do if v1.name id then dataj=i j=j+1 end end end end local root = mw.html.create( 'div' ) :wikitext(data and'Продукт можно переработать на фабриках: ') if #data>0 then table.sort(data, function(a, b) return a < b end) local ul=root:tag('ul') local tab=root:tag('table') tr=tab:tag('tr') for i,v in ipairs(data) do ul:tag('li') :wikitext(''..v..'') td=tr:tag('td') :css('padding','10px') :css('vertical-align','top') td:tag('div') :css('padding','0 10px 0 0') :css('font-size','16px') :wikitext(''..v..'') td:tag('div') :wikitext('200px|'..v..'|link='..v..'') if math.fmod(i, 3) 0 then tr=tab:tag('tr') end end else root:tag('div') :wikitext('Пока нет информации.') end return tostring( root ) end --Список продукции фабрик-- function p.product() local text=' ' local product={} local j=1 for key,v in pairs(arrData) do for i,v1 in ipairs(v.resources) do productj={} productj.fab=key productj.name=v1.nameprod j=j+1 end end table.sort(product,function( a, b ) return a.name < b.name end ) for i,v in ipairs(product) do if i 1 then text=text....string.sub (v.name, 1,2)..' ' else if string.sub (producti.name, 1,2)>string.sub (producti-1.name, 1,2) then text=text..' '....string.sub (v.name, 1,2)..' ' end end text=text..' '..v.name..' ' end text=text..' ' return text end --Общий список фабрик-- function p.list() local data1 = mw.loadData( 'Module:DatalistFactory' ) local data={} for i,v in pairs(data1) do datai=v end table.sort(data, function(a, b) return a < b end) local text=' ' for i,v in ipairs(data) do text=text..' '..v..' ' end text=text..' ' return text end return p